<?php
declare (strict_types=1);

namespace app\admin\validates;

use think\Validate;

/**
 * Menu验证器
 */
class OfficialAccountMessagesValidate extends Validate
{
    /**
     * 验证规则
     * @var array
     */
    protected $rule = [
        'id' => 'require|number',
        'key' => 'require|max:50',
        'content' => 'requireIf:messages_type,1|max:250',
        'type' => 'require|in:1,2,3',
        'name' => 'require|max:50',
        'media_id' => 'requireCallback:check_media_require',
        'key_type' => 'require|in:1,2',
        'messages_type' => 'require|in:1,2,3,4,5,6',
        'path' => 'requireCallback:check_path_require|url',
    ];

    /**
     * 验证字段描述
     * @var string[]
     */
    protected $field = [
        'id' => 'ID',
        'key' => '关键字',
        'name' => '规则名称',
        'content' => '消息内容',
        'type' => '内容类型',
        'media_id' => '微信素材',
        'key_type' => '匹配规则',
        'messages_type' => '消息类型',
        'path' => '素材url地址',
    ];

    /**
     * 验证场景
     * @var array
     */
    protected $scene = [
        //关键字回复
        'add_g' => ['key', 'name', 'content', 'media_id', 'key_type', 'messages_type', 'type', 'path'],
        'update_g' => ['key', 'name', 'content', 'media_id', 'key_type', 'messages_type', 'type', 'id', 'path'],
        //关注回复
        'add_gz' => ['content', 'media_id', 'messages_type', 'type'],
        'update_gz' => ['content', 'media_id', 'messages_type', 'type', 'id'],
        //消息回复
        'add_zd' => ['content', 'media_id', 'messages_type', 'type'],
        'update_zd' => ['content', 'media_id', 'messages_type', 'type', 'id'],
        //删除
        'delete' => ['id', 'type'],
    ];

    /**
     * 验证类型的时候必须
     * @param $value
     * @param $data
     * @return bool
     */
    public function check_media_require($value, $data): bool
    {
        if (!empty($data['messages_type']) && in_array($data['messages_type'], [2, 3, 4, 5, 6])) {
            return true;
        }
        return false;
    }

    /**
     * 验证类型的时候必须
     * @param $value
     * @param $data
     * @return bool
     */
    public function check_path_require($value, $data): bool
    {
        if (!empty($data['messages_type']) && in_array($data['messages_type'], [2])) {
            return true;
        }
        return false;
    }
}